package com.ryan.plugin;

import java.io.File;

/**
 * 用于递归遍历所有模块的java源文件, 并调用{@link ClassAnalyzer}分析java文件
 */
public class FileTraverse {
    public static void traverse(ClassAnalyzer analyzer, File file, TraverseListener listener) {
        if (file.isDirectory()) {
            for (File child : file.listFiles()) {
                traverse(analyzer, child, listener);
            }
        } else {
            if (file.getPath().endsWith(".java")) {
                if (listener != null) listener.onAnalyze(file, false);
                analyzer.analyze(file);
                if (listener != null) listener.onAnalyze(file, true);
            }
        }
    }

    /**
     * 文件分析回调, 当文件开始与结束分析时回调{@link #onAnalyze(File, boolean)}方法
     */
    public interface TraverseListener {
        /**
         * 当文件开始与结束分析时回调此方法
         * @param file 正在分析的文件
         * @param finish 文件是否分析完成
         */
        void onAnalyze(File file, boolean finish);
    }
}
